package condominios.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;


import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.swing.JOptionPane;

import condominios.excepcion.DAOExcepcion;
import condominios.modelo.Persona;
import condominios.modelo.ViewViendasCuotas;
import condominios.modelo.Vivienda;
import condominios.modelo.Cuota;
import condominios.modelo.Ubicacion;
import condominios.util.ConexionBD;




public class CuotaDAO extends BaseDAO {
		
	public     List<ViewViendasCuotas> listaViviendasPersonas() throws DAOExcepcion {	
		List<ViewViendasCuotas>   listaViewViendasCuotas= new ArrayList<ViewViendasCuotas>();
		ViewViendasCuotas viewViendasCuotas= null;
		Connection cn =null;
		CallableStatement cs =null;
		ResultSet rs =null;		
		try {			
			   cn  =ConexionBD.obtenerConexion();
			   cs=cn.prepareCall("{call USP_SEL_VIVIENDA_UBICACION_PERSONA_SelectJoin}");
			   rs= cs.executeQuery();
			  while (rs.next()) {
				  				
				  viewViendasCuotas  =  new  ViewViendasCuotas();
				  viewViendasCuotas.getPersona().setNombres(rs.getString(1));
				  viewViendasCuotas.getPersona().setApellidoPaterno(rs.getString(2));
				  viewViendasCuotas.getPersona().setApellidoMaterno(rs.getString(3));
				  //viewViendasCuotas.getUbicacion().setIdUbicacion(rs.getInt(4));
				  //viewViendasCuotas.getUbicacion().setDescripUbicacion(rs.getString(5));
				  viewViendasCuotas.getVivienda().setCodigo(rs.getInt(6));
				  viewViendasCuotas.getVivienda().setNumero(rs.getString(7));
				 // viewViendasCuotas.getVivienda().setMetraje(rs.getString(8));
				 // viewViendasCuotas.getVivienda().setEstado(rs.getInt(9));
				  listaViewViendasCuotas.add(viewViendasCuotas); 				 
			 }
						  
		} catch (SQLException e) {
			
			System.out.println(e);
			
		}finally{
			
			this.cerrarResultSet(rs);
			this.cerrarCallable(cs);
			this.cerrarConexion(cn);
			
		}		
	return   	listaViewViendasCuotas;
					
//		Connection con = null;
//		PreparedStatement stmt = null;
//		ResultSet rs = null;
//		try {
//			String query = "select * from producto where id_producto=?";
//			con = ConexionBD.obtenerConexion();
//			stmt = con.prepareStatement(query);
//			stmt.setInt(1, idProducto);
//
//			rs = stmt.executeQuery();
//			if (rs.next()) {
//				vo.setIdProducto(rs.getInt(1));
//				Categoria categoria = new Categoria();
//				categoria.setIdCategoria(rs.getInt(2));
//				vo.setCategoria(categoria);
//				vo.setNombre(rs.getString(3));
//				vo.setDescripcion(rs.getString(4));
//				vo.setPrecio(rs.getFloat(5));
//				vo.setStock(rs.getInt(6));
//				vo.setImportancia(rs.getInt(7));
//				vo.setImagen(rs.getString(8));
//			}
//		} catch (SQLException e) {
//			System.err.println(e.getMessage());
//			throw new DAOExcepcion(e.getMessage());
//		} finally {
//			this.cerrarResultSet(rs);
//			this.cerrarStatement(stmt);
//			this.cerrarConexion(con);
//		}
//		return vo;
//					
	}  

	public Collection<Cuota> buscarTodos()
			throws DAOExcepcion {
		String query = "select cuota.idCuota, ubicacion.descripUbicacion,cuota.periodoMes,cuota.periodoAnio,cuota.numCuota,cuota.importe, "
						+ " cuota.fechaVencimiento, persona.nombre,persona.apellidoPaterno,persona.apellidoMaterno , vivienda.numero " 
						+ "from cuota inner join vivienda on cuota.idVivienda = vivienda.idVivienda inner join persona on vivienda.idPersona "
						+ "= persona.idPersona inner join ubicacion on vivienda.idUbicacion = ubicacion.idUbicacion";
		Collection<Cuota> c = new ArrayList<Cuota>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);	
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cuota vo = new Cuota();
				
				vo.setIdCuota(rs.getInt("cuota.idCuota"));
				vo.setPeriodoMes(rs.getInt("cuota.periodoMes"));
				vo.setPeriodoAnio(rs.getInt("cuota.periodoAnio"));
				vo.setNumCuota(rs.getInt("cuota.numCuota"));
				vo.setImporte(rs.getFloat("cuota.importe"));
				vo.setFechaVencimiento (rs.getDate("cuota.fechaVencimiento"));
				
				Persona pe = new Persona();
				pe.setNombres(rs.getString("persona.nombre"));
				pe.setApellidoPaterno(rs.getString("persona.apellidoPaterno"));
				pe.setApellidoMaterno(rs.getString("persona.apellidoMaterno"));
				
				vo.setDatosPersona(pe);
				
				Vivienda vi = new Vivienda();
				vi.setNumero(rs.getString("vivienda.numero"));
				
				vo.setDatosVivienda(vi);
				
				Ubicacion ub = new Ubicacion();
				ub.setDescripUbicacion(rs.getString("ubicacion.descripUbicacion"));
				vo.setDatosUbicacion(ub);				
				
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public Collection<Cuota> buscarPorFechaVencimiento(String fechaBuscar)
			throws DAOExcepcion {
		
		String query = "select cuota.idCuota, ubicacion.descripUbicacion,cuota.periodoMes,cuota.periodoAnio,cuota.numCuota,cuota.importe, "
				+ " cuota.fechaVencimiento, persona.nombre,persona.apellidoPaterno,persona.apellidoMaterno , vivienda.numero " 
				+ "from cuota inner join vivienda on cuota.idVivienda = vivienda.idVivienda inner join persona on vivienda.idPersona "
				+ "= persona.idPersona inner join ubicacion on vivienda.idUbicacion = ubicacion.idUbicacion where cuota.fechaVencimiento >=?";
		
		System.out.println("Esta es la cadena:" + query);
		
		Collection<Cuota> c = new ArrayList<Cuota>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,fechaBuscar);

			rs = stmt.executeQuery();
			while (rs.next()) {
				Cuota vo = new Cuota();
				
				vo.setIdCuota(rs.getInt("cuota.idCuota"));
				vo.setPeriodoMes(rs.getInt("cuota.periodoMes"));
				vo.setPeriodoAnio(rs.getInt("cuota.periodoAnio"));
				vo.setNumCuota(rs.getInt("cuota.numCuota"));
				vo.setImporte(rs.getFloat("cuota.importe"));
				vo.setFechaVencimiento (rs.getDate("cuota.fechaVencimiento"));
				
				Persona pe = new Persona();
				pe.setNombres(rs.getString("persona.nombre"));
				pe.setApellidoPaterno(rs.getString("persona.apellidoPaterno"));
				pe.setApellidoMaterno(rs.getString("persona.apellidoMaterno"));
				
				vo.setDatosPersona(pe);
				
				Vivienda vi = new Vivienda();
				vi.setNumero(rs.getString("vivienda.numero"));
				
				vo.setDatosVivienda(vi);
				
				Ubicacion ub = new Ubicacion();
				ub.setDescripUbicacion(rs.getString("ubicacion.descripUbicacion"));
				vo.setDatosUbicacion(ub);	
				
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
}
